home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib15.dsk / TEXT EDITOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  8KB  |  395 lines

  1. 10  REM  **********************
  2. 11  REM  *    TEXT EDITOR     *
  3. 12  REM  * BY PAUL M. HYMAN   *
  4. 13  REM  * COPYRIGHT (C) 1983 *
  5. 14  REM  * BY MICROSPARC, INC *
  6. 15  REM  * LINCOLN, MA. 01773 *
  7. 16  REM  **********************
  8. 20 D$ =  CHR$(4):ML = 1000
  9. 30  DIM L$(ML)
  10. 40  DIM FL%(ML)
  11. 50  DIM BL%(ML)
  12. 60 AVPTR = 0
  13. 70 IUPTR = 0
  14. 80 LL = 0
  15. 90 D$ =  CHR$(4)
  16. 100  PRINT D$;"BLOAD STRINGIN"
  17. 110  INPUT "ENTER FILE NAME (RETURN IF NONE) ";FF$
  18. 120  IF FF$ < >"" GOTO 140
  19. 130  GOTO 310
  20. 140  ONERR  GOTO 280
  21. 150  PRINT D$;"OPEN ";FF$
  22. 160  PRINT D$;"READ ";FF$
  23. 170 LL = LL +1
  24. 180  CALL 768,A$
  25. 190 L$(LL) = A$
  26. 200  IF LL >1 GOTO 220
  27. 210  GOTO 250
  28. 220 FL%(LL -1) = LL
  29. 230 BL%(LL) = LL -1
  30. 240  GOTO 260
  31. 250 IUPTR = 1
  32. 260  PRINT L$(LL)
  33. 270  GOTO 170
  34. 280  POKE 216,0
  35. 290  PRINT D$
  36. 300 CL = 1
  37. 310  HOME 
  38. 320  GOSUB 3390
  39. 330  PRINT 
  40. 340  INPUT "ENTER COMMAND ";C$
  41. 350 LC =  LEN(C$)
  42. 360  IF LC >1  THEN  GOTO 380
  43. 370  GOTO 460
  44. 380 N$ =  RIGHT$(C$,LC -1)
  45. 390 N =  VAL(N$)
  46. 400 C$ =  LEFT$(C$,1)
  47. 410  IF N < = 0 GOTO 430
  48. 420  GOTO 450
  49. 430  PRINT "INVALID NUMBER"
  50. 440  GOTO 330
  51. 450  GOTO 470
  52. 460 N = 1
  53. 470  IF C$ = "Q"  THEN  GOTO 490
  54. 480  GOTO 560
  55. 490  IF SV = 0 GOTO 510
  56. 500  GOTO 540
  57. 510  PRINT "CHANGES NOT SAVED"
  58. 520 SV = 1
  59. 530  GOTO 550
  60. 540  END 
  61. 550  GOTO 3240
  62. 560  IF C$ = "F" GOTO 580
  63. 570  GOTO 740
  64. 580  INPUT "STRING TO SEARCH FOR-";SF$
  65. 590 I = CL
  66. 600  PRINT ".";
  67. 610  GOSUB 3760
  68. 620  IF LM < >0 GOTO 660
  69. 630 I = FL%(I)
  70. 640  IF I = 0 GOTO 660
  71. 650  GOTO 600
  72. 660  PRINT 
  73. 670  IF LM < >0 GOTO 690
  74. 680  GOTO 720
  75. 690 CL = I
  76. 700  GOSUB 3390
  77. 710  GOTO 730
  78. 720  PRINT "STRING NOT FOUND"
  79. 730  GOTO 3240
  80. 740  IF C$ = "X" GOTO 760
  81. 750  GOTO 1080
  82. 760  PRINT "STRING EXCHANGE"
  83. 770  INPUT "ENTER STRING TO SEARCH FOR:";SF$
  84. 780  INPUT "ENTER REPLACEMENT STRING:";RS$
  85. 790 I = CL
  86. 800 NT = 0
  87. 810 NT = NT +1
  88. 820  PRINT ".";
  89. 830  GOSUB 3760
  90. 840  IF LM < >0 GOTO 880
  91. 850 I = FL%(I)
  92. 860  IF I = 0  OR NT = N GOTO 880
  93. 870  GOTO 810
  94. 880  PRINT 
  95. 890  IF LM < >0 GOTO 910
  96. 900  GOTO 1060
  97. 910 CL = I
  98. 920  IF LM >1 GOTO 940
  99. 930  GOTO 960
  100. 940 LF$ =  LEFT$(L$(CL),LM -1)
  101. 950  GOTO 970
  102. 960 LF$ = ""
  103. 970 LR =  LEN(L$(CL)) -LM - LEN(SF$) +1
  104. 980  IF LR >0 GOTO 1000
  105. 990  GOTO 1020
  106. 1000 LR$ =  RIGHT$(L$(CL),LR)
  107. 1010  GOTO 1030
  108. 1020 LR$ = ""
  109. 1030 L$(CL) = LF$ +RS$ +LR$
  110. 1040  GOSUB 3390
  111. 1050  GOTO 1070
  112. 1060  PRINT "STRING NOT FOUND"
  113. 1070  GOTO 3240
  114. 1080  IF C$ = "P" GOTO 1100
  115. 1090  GOTO 1200
  116. 1100 I = 0
  117. 1110 L = CL
  118. 1120  IF I <N  AND L < >0 GOTO 1140
  119. 1130  GOTO 1180
  120. 1140 PB$(I) = L$(L)
  121. 1150 L = FL%(L)
  122. 1160 I = I +1
  123. 1170  GOTO 1120
  124. 1180 NP = I
  125. 1190  GOTO 3240
  126. 1200  IF C$ = "M" GOTO 1220
  127. 1210  GOTO 1380
  128. 1220 SV = 0
  129. 1230  PRINT NP;" LINES IN PICK BUFFER"
  130. 1240  IF NP >0 GOTO 1260
  131. 1250  GOTO 1350
  132. 1260  FOR I = 0 TO NP -1
  133. 1270  GOSUB 3250
  134. 1280 L$(K) = PB$(I)
  135. 1290 BL%(K) = CL
  136. 1300 FL%(K) = FL%(CL)
  137. 1310 FL%(CL) = K
  138. 1320 CL = K
  139. 1330  NEXT 
  140. 1340  GOTO 1360
  141. 1350  PRINT "NOTHING IN PICK BUFFER"
  142. 1360  GOSUB 3390
  143. 1370  GOTO 3240
  144. 1380  IF C$ = "L" GOTO 1400
  145. 1390  GOTO 1420
  146. 1400  GOSUB 3390
  147. 1410  GOTO 3240
  148. 1420  IF C$ = ""  OR C$ = "+" GOTO 1440
  149. 1430  GOTO 1550
  150. 1440  FOR I = 1 TO N
  151. 1450  IF FL%(CL) < >0 GOTO 1470
  152. 1460  GOTO 1480
  153. 1470 CL = FL%(CL)
  154. 1480  NEXT 
  155. 1490  IF N = 1 GOTO 1510
  156. 1500  GOTO 1530
  157. 1510  PRINT L$(CL)
  158. 1520  GOTO 1540
  159. 1530  GOSUB 3390
  160. 1540  GOTO 3240
  161. 1550  IF C$ = "-" GOTO 1570
  162. 1560  GOTO 1680
  163. 1570  FOR I = 1 TO N
  164. 1580  IF BL%(CL) < >0 GOTO 1600
  165. 1590  GOTO 1610
  166. 1600 CL = BL%(CL)
  167. 1610  NEXT 
  168. 1620  IF N = 1 GOTO 1640
  169. 1630  GOTO 1660
  170. 1640  PRINT L$(CL)
  171. 1650  GOTO 1670
  172. 1660  GOSUB 3390
  173. 1670  GOTO 3240
  174. 1680  IF C$ = "R" GOTO 1700
  175. 1690  GOTO 1750
  176. 1700 SV = 0
  177. 1710  CALL 768,A$
  178. 1720 L$(CL) = A$
  179. 1730  GOSUB 3390
  180. 1740  GOTO 3240
  181. 1750  IF C$ = "I" GOTO 1770
  182. 1760  GOTO 1920
  183. 1770 SV = 0
  184. 1780  CALL 768,A$
  185. 1790  IF A$ = "" GOTO 1900
  186. 1800  GOSUB 3250
  187. 1810 L$(K) = A$
  188. 1820  IF CL < >0 GOTO 1840
  189. 1830  GOTO 1880
  190. 1840 BL%(K) = CL
  191. 1850 FL%(K) = FL%(CL)
  192. 1860 BL%(FL%(CL)) = K
  193. 1870 FL%(CL) = K
  194. 1880 CL = K
  195. 1890  GOTO 1780
  196. 1900  GOSUB 3390
  197. 1910  GOTO 3240
  198. 1920  IF C$ = "B" GOTO 1940
  199. 1930  GOTO 2100
  200. 1940 SV = 0
  201. 1950  CALL 768,A$
  202. 1960  IF A$ = "" GOTO 2080
  203. 1970  GOSUB 3250
  204. 1980 L$(K) = A$
  205. 1990 FL%(K) = CL
  206. 2000 BL%(K) = BL%(CL)
  207. 2010  IF BL%(CL) = 0 GOTO 2030
  208. 2020  GOTO 2050
  209. 2030 IUPTR = K
  210. 2040  GOTO 2060
  211. 2050 FL%(BL%(CL)) = K
  212. 2060 BL%(CL) = K
  213. 2070  GOTO 1950
  214. 2080  GOSUB 3390
  215. 2090  GOTO 3240
  216. 2100  IF C$ = "D" GOTO 2120
  217. 2110  GOTO 2460
  218. 2120 SV = 0
  219. 2130  PRINT "DELETE ";N;" LINE(S)"
  220. 2140 I = 0
  221. 2150 NP = 0
  222. 2160  IF I <N GOTO 2180
  223. 2170  GOTO 2400
  224. 2180 PB$(I) = L$(CL)
  225. 2190 Z = CL
  226. 2200  PRINT PB$(I)
  227. 2210  IF FL%(CL) = 0 GOTO 2230
  228. 2220  GOTO 2300
  229. 2230 CL = BL%(CL)
  230. 2240 FL%(CL) = 0
  231. 2250 FL%(Z) = AVPTR
  232. 2260 AVPTR = Z
  233. 2270  PRINT "END OF BUFFER"
  234. 2280  GOTO 2400
  235. 2290  GOTO 2350
  236. 2300 CL = FL%(CL)
  237. 2310 BL%(CL) = BL%(Z)
  238. 2320 FL%(BL%(Z)) = CL
  239. 2330 FL%(Z) = AVPTR
  240. 2340 AVPTR = Z
  241. 2350  IF BL%(CL) = 0 GOTO 2370
  242. 2360  GOTO 2380
  243. 2370 IUPTR = CL
  244. 2380 I = I +1
  245. 2390  GOTO 2160
  246. 2400 NP = N
  247. 2410  IF I <NP GOTO 2430
  248. 2420  GOTO 2440
  249. 2430 NP = I +1
  250. 2440  GOSUB 3390
  251. 2450  GOTO 3240
  252. 2460  IF C$ = "A" GOTO 2480
  253. 2470  GOTO 2700
  254. 2480 SV = 0
  255. 2490 RL$ = ""
  256. 2500  IF RL$ < >"R"  AND RL$ < >"L" GOTO 2520
  257. 2510  GOTO 2540
  258. 2520  INPUT "ADJUST LINES RIGHT OR LEFT (R/L)? ";RL$
  259. 2530  GOTO 2500
  260. 2540  INPUT "HOW MANY SPACES? ";Q
  261. 2550 I = 0
  262. 2560  IF RL$ = "R" GOTO 2580
  263. 2570  GOTO 2610
  264. 2580 BB$ = "                    "
  265. 2590 L$(CL) =  LEFT$(BB$,Q) +L$(CL)
  266. 2600  GOTO 2620
  267. 2610 L$(CL) =  RIGHT$(L$(CL), LEN(L$(CL)) -Q)
  268. 2620  IF FL%(CL) < >0 GOTO 2640
  269. 2630  GOTO 2650
  270. 2640 CL = FL%(CL)
  271. 2650 I = I +1
  272. 2660  IF I = N  OR FL%(CL) = 0 GOTO 2680
  273. 2670  GOTO 2560
  274. 2680  GOSUB 3390
  275. 2690  GOTO 3240
  276. 2700  IF C$ = "S" GOTO 2720
  277. 2710  GOTO 2840
  278. 2720  INPUT "FILE NAME-";F$
  279. 2730  PRINT D$;"OPEN";F$
  280. 2740  PRINT D$;"WRITE";F$
  281. 2750 I = IUPTR
  282. 2760  IF I < >0 GOTO 2780
  283. 2770  GOTO 2810
  284. 2780  PRINT L$(I)
  285. 2790 I = FL%(I)
  286. 2800  GOTO 2760
  287. 2810  PRINT D$;"CLOSE";F$
  288. 2820 SV = 1
  289. 2830  GOTO 3240
  290. 2840  IF C$ = "J" GOTO 2860
  291. 2850  GOTO 3020
  292. 2860 LC$ = ""
  293. 2870  IF LC$ < >"B"  AND LC$ < >"E" GOTO 2890
  294. 2880  GOTO 2920
  295. 2890  INPUT "JUMP TO END OR BEGINNING?";C$
  296. 2900 LC$ =  LEFT$(C$,1)
  297. 2910  GOTO 2870
  298. 2920  IF LC$ = "B" GOTO 2940
  299. 2930  GOTO 2960
  300. 2940 CL = IUPTR
  301. 2950  GOTO 3000
  302. 2960  IF FL%(CL) < >0 GOTO 2980
  303. 2970  GOTO 3000
  304. 2980 CL = FL%(CL)
  305. 2990  GOTO 2960
  306. 3000  GOSUB 3390
  307. 3010  GOTO 3240
  308. 3020  IF C$ = "V" GOTO 3040
  309. 3030  GOTO 3060
  310. 3040  PRINT "AVAILABLE MEM="; FRE(0)
  311. 3050  GOTO 3240
  312. 3060  PRINT "?"
  313. 3070  PRINT "LEGAL COMMANDS ARE:"
  314. 3080  PRINT "+ OR NULL: MOVE FORWARD"
  315. 3090  PRINT "-: MOVE BACKWARD"
  316. 3100  PRINT "I: INSERT LINES AFTER CURRENT LINE"
  317. 3110  PRINT "B: INSERT LINES BEFORE CURRENT LINE"
  318. 3120  PRINT "J: JUMP TO BEGINNING OR END OF FILE"
  319. 3130  PRINT "S: SAVE TO DISK"
  320. 3140  PRINT "Q: QUIT"
  321. 3150  PRINT "A: ADJUST LINES RIGHT OR LEFT"
  322. 3160  PRINT "D: DELETE LINES"
  323. 3170  PRINT "P: PICK LINES (TO USE WITH M COMMAND)"
  324. 3180  PRINT "M: MERGE IN PICKED OR DELETED LINES"
  325. 3190  PRINT "R: REPLACE CURRENT LINE"
  326. 3200  PRINT "F: FIND LINE CONTAINING SPECIFIED STRING"
  327. 3210  PRINT "X: EXCHANGE STRING"
  328. 3220  PRINT "V: PRINT AVAILABLE MEMORY"
  329. 3230  PRINT "L: LIST CURRENT LINE AND 10 BEFORE AND AFTER"
  330. 3240  GOTO 330
  331. 3250  IF IUPTR = 0 GOTO 3270
  332. 3260  GOTO 3310
  333. 3270 K = 1
  334. 3280 IUPTR = 1
  335. 3290 LL = 1
  336. 3300  GOTO 3380
  337. 3310  IF AVPTR = 0 GOTO 3330
  338. 3320  GOTO 3360
  339. 3330 LL = LL +1
  340. 3340 K = LL
  341. 3350  GOTO 3380
  342. 3360 K = AVPTR
  343. 3370 AVPTR = FL%(K)
  344. 3380  RETURN 
  345. 3390  IF IUPTR = 0 GOTO 3410
  346. 3400  GOTO 3240
  347. 3410  RETURN 
  348. 3420  HOME 
  349. 3430 N = 10
  350. 3440 I = CL
  351. 3450 NT = 0
  352. 3460 NT = NT +1
  353. 3470  IF BL%(I) < >0 GOTO 3490
  354. 3480  GOTO 3500
  355. 3490 I = BL%(I)
  356. 3500  IF BL%(I) = 0 GOTO 3530
  357. 3510  IF NT = 10 GOTO 3530
  358. 3520  GOTO 3460
  359. 3530 FD = I
  360. 3540 NT = 0
  361. 3550 I = CL
  362. 3560 NT = NT +1
  363. 3570  IF FL%(I) < >0 GOTO 3590
  364. 3580  GOTO 3600
  365. 3590 I = FL%(I)
  366. 3600  IF FL%(I) = 0 GOTO 3630
  367. 3610  IF NT = 10 GOTO 3630
  368. 3620  GOTO 3560
  369. 3630 LD = I
  370. 3640 I = FD
  371. 3650  IF I = CL GOTO 3670
  372. 3660  GOTO 3680
  373. 3670  INVERSE 
  374. 3680  PRINT L$(I)
  375. 3690  IF I = CL GOTO 3710
  376. 3700  GOTO 3720
  377. 3710  NORMAL 
  378. 3720  IF I = LD GOTO 3750
  379. 3730 I = FL%(I)
  380. 3740  GOTO 3650
  381. 3750  RETURN 
  382. 3760 LS =  LEN(SF$)
  383. 3770 LM = 1
  384. 3780 A$ = L$(I)
  385. 3790 LA =  LEN(A$)
  386. 3800  IF LM < = LA -LS +1 GOTO 3820
  387. 3810  GOTO 3870
  388. 3820  IF  MID$ (A$,LM,LS) = SF$ GOTO 3840
  389. 3830  GOTO 3850
  390. 3840  GOTO 3880
  391. 3850 LM = LM +1
  392. 3860  GOTO 3800
  393. 3870 LM = 0
  394. 3880  RETURN 
  395. 3890  END